package com.example.demo.user.entity;

import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Getter;
import lombok.Setter;

import java.time.LocalDateTime;

/**
 * 基础用户实体,提供账号体系的最小实现。
 */
@Getter
@Setter
@TableName("user")
@Schema(description = "用户实体")
public class User {

    /**
     * 主键 ID。
     */
    @TableId(type = IdType.AUTO)
    @Schema(description = "数据库主键", example = "1")
    private Long id;

    /**
     * 登录名。
     */
    @TableField("username")
    @Schema(description = "登录名", example = "student01")
    private String username;

    /**
     * 密码(BCrypt 摘要)。
     */
    @TableField("password")
    @Schema(description = "密码摘要", example = "$2a$10$examplehashvalue")
    private String password;

    /**
     * 展示名。
     */
    @TableField("nickname")
    @Schema(description = "昵称", example = "张三")
    private String nickname;

    /**
     * 角色: ADMIN / USER。
     */
    @TableField("role")
    @Schema(description = "角色", example = "USER")
    private String role;

    /**
     * ZIP 生成总配额。
     */
    @TableField("zip_quota")
    @Schema(description = "ZIP 配额", example = "10")
    private Integer zipQuota;

    /**
     * 已使用的 ZIP 次数。
     */
    @TableField("zip_used")
    @Schema(description = "已使用次数", example = "2")
    private Integer zipUsed;

    /**
     * 创建时间。
     */
    @TableField("created_at")
    @Schema(description = "创建时间", example = "2025-10-20 12:00:00")
    private LocalDateTime createdAt;

    /**
     * 更新时间。
     */
    @TableField("updated_at")
    @Schema(description = "更新时间", example = "2025-10-21 08:00:00")
    private LocalDateTime updatedAt;
}
